package cells.datahandling;

import com.aspose.cells.Cell;
import com.aspose.cells.Cells;
import com.aspose.cells.CellsHelper;
import com.aspose.cells.ReferredArea;
import com.aspose.cells.ReferredAreaCollection;
import com.aspose.cells.Workbook;

public class TracingPrecedentsAndDependents
{
	public static void main(String[] args) throws Exception
	{
		//Instantiating a Workbook object
		Workbook workbook = new Workbook("data/workbook.xls");
		
		Cells cells = workbook.getWorksheets().get(0).getCells();
		Cell cell = cells.get("A12");
		
		//Tracing precedents of the cell A12.
		//The return array contains ranges and cells.
		ReferredAreaCollection ret = cell.getPrecedents();
		
		//Printing all the precedent cells' name.
		if(ret != null)
		{
		  for(int m = 0 ; m < ret.getCount(); m++)
		  {
		    ReferredArea area = ret.get(m);
		    StringBuilder stringBuilder = new StringBuilder();
		    if (area.isExternalLink())
		    {
		        stringBuilder.append("[");
		        stringBuilder.append(area.getExternalFileName());
		        stringBuilder.append("]");
		     }
		     stringBuilder.append(area.getSheetName());
		     stringBuilder.append("!");
		     stringBuilder.append(CellsHelper.cellIndexToName(area.getStartRow(), area.getStartColumn()));
		     if (area.isArea())
		      {
		          stringBuilder.append(":");
		          stringBuilder.append(CellsHelper.cellIndexToName(area.getEndRow(), area.getEndColumn()));
		      }
		      System.out.println("Tracing Precedents: " + stringBuilder.toString());
		   }
		}
		
		//Get the A1 cell
		Cell c = cells.get("A5");
		//Get the all the Dependents of A5 cell
		Cell[] dependents = c.getDependents(true);
		for (int i = 0; i< dependents.length; i++)
		{
		     System.out.println("Tracing Dependents: " + dependents[i].getWorksheet().getName() +dependents[i].getName() + ":" + dependents[i].getIntValue());
		}
	}
}
